home *** CD-ROM | disk | FTP | other *** search
/ Freelog 117 / FreelogNo117-OctobreNovembre2013.iso / Programmation / jedit / jedit5.1.0install.exe / {app} / macros / Properties / Insert_Buffer_Properties.bsh < prev    next >
Text File  |  2013-07-28  |  8KB  |  235 lines

  1. /* :encoding=UTF-8:
  2.  * Insert_Buffer_Properties.bsh - a Beanshell macro
  3.  * for the jEdit text editor that provides a gui for
  4.  * inserting Buffer Local properties for the current buffer
  5.  * into the current buffer.  If the buffer's mode as a line
  6.  * comment defined, or comment start and end properties then
  7.  * the inserted properties will be commented out.
  8.  *
  9.  * Copyright (C) 2002, 2003 Ollie Rutherfurd <oliver@rutherfurd.net>
  10.  *
  11.  * BugFixed by Bj├╢rn "Vampire" Kautler <Vampire0@gmx.net>
  12.  *
  13.  * This program is free software; you can redistribute it and/or
  14.  * modify it under the terms of the GNU General Public License
  15.  * as published by the Free Software Foundation; either version 2
  16.  * of the License, or any later version.
  17.  *
  18.  * This program is distributed in the hope that it will be useful,
  19.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  20.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  21.  * GNU General Public License for more details.
  22.  *
  23.  * You should have received a copy of the GNU General Public License
  24.  * along with this program; if not, write to the Free Software
  25.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  26.  *
  27.  * $Id: Insert_Buffer_Properties.bsh 22807 2013-02-20 18:20:47Z kerik-sf $
  28.  */
  29.  
  30. import java.awt.BorderLayout;
  31. import java.awt.event.ActionEvent;
  32. import java.util.Hashtable;
  33. import java.util.StringTokenizer;
  34. import java.util.Vector;
  35. import javax.swing.Box;
  36. import javax.swing.BoxLayout;
  37. import javax.swing.JButton;
  38. import javax.swing.JDialog;
  39. import javax.swing.JLabel;
  40. import javax.swing.JPanel;
  41. import javax.swing.JScrollPane;
  42. import javax.swing.border.EmptyBorder;
  43. import org.gjt.sp.jedit.gui.JCheckBoxList;
  44.  
  45. // Localization
  46. final static String InsertLocalPropertiesLabel = jEdit.getProperty("macro.rs.InsertBufferProperties.InsertLocalProperties.label", "Insert Buffer Local Properties");
  47. final static String PropertiesLabel = jEdit.getProperty("macro.rs.InsertBufferProperties.Properties.label", "Properties:");
  48. final static String InsertLabel = jEdit.getProperty("macro.rs.InsertBufferProperties.Insert.label", "Insert");
  49. final static String PROPERTY_COMMON_CANCEL = jEdit.getProperty("common.cancel");
  50. final static String MustBeIn10LinesMessage = jEdit.getProperty("macro.rs.InsertBufferProperties.MustBeIn10Lines.message", "Note: Buffer Local properties must in the first or last 10 lines of a buffer to be recognized by jEdit.");
  51. final static String NotEditableMessage = jEdit.getProperty("macro.rs.general.ErrorNotEditableDialog.message", "Buffer is not editable");
  52.  
  53. BufferLocalPropertiesDialog(View view){
  54.  
  55.     this.view = view;
  56.     buffer = view.getTextArea().getBuffer();
  57.     mode = buffer.getMode().name;
  58.  
  59. // removed non-valid BLPs and added missing ones
  60.     props = new Hashtable();
  61.     props.put("mode","");
  62.     props.put("indentSize","int");
  63.     props.put("tabSize","int");
  64.     props.put("noTabs","bool");
  65.     props.put("wrap","str");
  66.     props.put("maxLineLen","int");
  67.     props.put("folding","str");
  68.     props.put("collapseFolds","int");
  69.     props.put("deepIndent","bool");
  70.     props.put("noWordSep","str");
  71.     props.put("wordBreakChars","str");
  72.  
  73.     _checked = jEdit.getProperty("macro.insert-buffer-properties." + mode,"");
  74.     tokens = new StringTokenizer(_checked,",");
  75.     checkedProps = new Hashtable();
  76.     while(tokens.hasMoreTokens())
  77.     {
  78.         property = tokens.nextToken();
  79.         checkedProps.put(property,"checked");
  80.     }
  81.  
  82.     dialog = new JDialog(view,InsertLocalPropertiesLabel,true);
  83.     content = new JPanel(new BorderLayout());
  84.     content.setBorder(new EmptyBorder(10,10,10,10));
  85.     dialog.setContentPane(content);
  86.     content.add(new JLabel(PropertiesLabel), BorderLayout.NORTH);
  87.  
  88.     _entries = new Vector();
  89.     names = props.keys();
  90.     while(names.hasMoreElements()){
  91.         name = names.nextElement();
  92.         checked = checkedProps.get(name);
  93.         entry = new JCheckBoxList.Entry(checked != null,name);
  94.         _entries.addElement(entry);
  95.     }
  96.     entries = new JCheckBoxList.Entry[_entries.size()];
  97.     _entries.copyInto(entries);
  98.  
  99.     checkBox = new JCheckBoxList(entries);
  100.     checkBox.addKeyListener(this);
  101.     content.add(new JScrollPane(checkBox),
  102.         BorderLayout.CENTER);
  103.  
  104.     buttons = new JPanel();
  105.     buttons.setBorder(new EmptyBorder(12,50,0,50));
  106.     buttons.setLayout(new BoxLayout(buttons,BoxLayout.X_AXIS));
  107.     buttons.add(Box.createGlue());
  108.     insert = new JButton(InsertLabel);
  109.     cancel = new JButton(PROPERTY_COMMON_CANCEL);
  110.     insert.addActionListener(this);
  111.     cancel.addActionListener(this);
  112.     dialog.getRootPane().setDefaultButton(insert);
  113.     buttons.add(insert);
  114.     buttons.add(Box.createHorizontalStrut(6));
  115.     buttons.add(cancel);
  116.     buttons.add(Box.createGlue());
  117.     content.add(buttons,BorderLayout.SOUTH);
  118.  
  119.     void actionPerformed(ActionEvent evt){
  120.         if(evt.getSource() == cancel)
  121.             dialog.dispose();
  122.         else
  123.             this.insertProperties();
  124.     }
  125.  
  126.     keyPressed(KeyEvent evt){
  127.         if(evt.getKeyCode() == KeyEvent.VK_ESCAPE)
  128.             dialog.dispose();
  129.         else if(evt.getKeyCode() == KeyEvent.VK_ENTER)
  130.             this.insertProperties();
  131.     }
  132.     keyReleased(KeyEvent evt){;}
  133.     keyTyped(KeyEvent evt){;}
  134.  
  135.     insertProperties(){
  136. // removed isReadOnly-Check because already done in the beginning of the script
  137.         checkNextTime = new StringBuffer();
  138.         buff = new StringBuffer();
  139.         names = checkBox.getCheckedValues();
  140.         for(i=0; i < names.length; i++)
  141.         {
  142. // moved the assignation in front of the checkNextTime-build,
  143. // because "name" is used and will have a wrong value otherwise
  144.             name = names[i];
  145.             type = props.get(name);
  146.  
  147.             if(i > 0)
  148.                 checkNextTime.append(',');
  149.             checkNextTime.append(name);
  150.  
  151. // changed the value reading/building/escaping
  152.             if(name.equals("mode"))
  153.                 value = mode;
  154.             else if(type.equals("bool"))
  155.                 value = buffer.getBooleanProperty(name);
  156.             else if(type.equals("str"))
  157.             {
  158.                 value = buffer.getStringProperty(name);
  159.                 if(value == null)
  160.                     value = "";
  161.                 value = value.replaceAll("=","\\\\=").replaceAll(":","\\\\:").replaceAll("\n","\\\\n").replaceAll("\t","\\\\t");
  162.             }
  163.             else if(type.equals("int"))
  164.             {
  165.                 value = buffer.getIntegerProperty(name,-1);
  166.                 if(value == -1)
  167.                     value = "";
  168.             }
  169.             else
  170.                 value = "";
  171.             buff.append(':').append(name).append('=').append(value);
  172.         }
  173.  
  174.         jEdit.setProperty("macro.insert-buffer-properties." + mode,
  175.             checkNextTime.toString());
  176.  
  177.         if(buff.length() > 0)
  178.             buff.append(':');
  179.         properties = buff.toString();
  180.  
  181.         // try to comment out the properties first using a lineComment
  182.         // and if that's not defined, look for comment start and end
  183.         // properties -- use context senstive properties
  184.         caret = view.getTextArea().getCaretPosition();
  185.         comment = buffer.getContextSensitiveProperty(caret,"lineComment");
  186.         if(comment != null && comment.length() > 0)
  187.             properties = comment + " " + properties;
  188.         else
  189.         {
  190.             commentStart = buffer.getContextSensitiveProperty(caret,"commentStart");
  191.             commentEnd = buffer.getContextSensitiveProperty(caret,"commentEnd");
  192.             if(commentStart != null && commentEnd != null)
  193.                     properties = commentStart + " " + properties + " " + commentEnd;
  194.         }
  195.         buffer.insert(caret,properties);
  196.  
  197.         line = view.getTextArea().getCaretLine();
  198.         if(line >= 10 && line < (buffer.getLineCount()-10))
  199.             Macros.message(view, MustBeIn10LinesMessage);
  200.  
  201.         dialog.dispose();
  202.     }
  203.  
  204.     dialog.pack();
  205. // cosmetic size-correction
  206.     dialog.setSize(250,290);
  207.     dialog.setLocationRelativeTo(view);
  208.     dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
  209.     dialog.setVisible(true);
  210. }
  211.  
  212. if(buffer.isReadOnly())
  213.     Macros.error(view, NotEditableMessage);
  214. else
  215.     BufferLocalPropertiesDialog(view);
  216.  
  217. /*
  218.     Macro index data (in DocBook format)
  219.  
  220. <listitem>
  221.     <para><filename>Insert_Buffer_Properties.bsh</filename></para>
  222.     <abstract><para>
  223.     Inserts buffer-local properties into the current buffer.
  224.     </para></abstract>
  225.     <para>
  226.     If the buffer's 
  227.     mode has a line comment defined, or comment start and end
  228.     defined, the inserted properties will be commented out.
  229.     </para>
  230. </listitem>
  231.  
  232. */
  233.  
  234. // :wrap=none:noTabs=false:collapseFolds=0:maxLineLen=80:mode=beanshell:indentSize=8:deepIndent=false:folding=none:
  235.